#include <bits/stdc++.h>

using namespace std;


class Solution {
public:

    bool circularArrayLoop(vector<int>& nums) {
        int n=nums.size();
        auto getnext=[](int a,int b,int n){
            return ((a+b)%n+n)%n;
        };

        for(int i=0;i<n;i++){
            if(nums[i]==0){
                continue;
            }
            int slow=i,fast=getnext(i,nums[i],n);
            int fastn=getnext(fast,nums[fast],n);
            int start=nums[slow];
            while(start*nums[fast]>0 && start*nums[fastn]>0){
                if(slow!=fast){
                    slow=getnext(slow,nums[slow],n);
                    fast=getnext(fastn,nums[fastn],n);
                    fastn=getnext(fast,nums[fast],n);
                }else{
                    if(slow==getnext(slow,nums[slow],n)){
                        break; //长度==1
                    }else{
                        return true;
                    }
                }
            }
            slow=i;
            while(start*nums[slow]>0){
                nums[slow]=0;
                slow=getnext(slow,nums[slow],n);
            }
        }
        return false;
    }
};

int main(){

    vector<int> v={2,-1,1,2,2};
    Solution s;
    cout << s.circularArrayLoop(v) <<endl;


    return 0;
}